package org.ejb.entities;



import javax.persistence.*;

import java.io.Serializable;

/**
 * Cette classe represente une ligne de commande. Un bon de commande possede plusieurs
 * lignes de commande.
 */

@SuppressWarnings("serial")
@Entity
public class OrderLine implements Serializable {

    // ======================================
    // =             Attributs              =
    // ======================================
//	private static final int LOUER = 1;
//	private static final int ACHETE = 2;		
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private Integer quantity;
    
	@OneToOne(cascade=CascadeType.ALL)
    private Item item;
	
    @ManyToOne
    private OrderParFois orderParFois;
    
    // Le prix unitaire du produit
    private Float unitCost;
    
    // Le sous total du produit
    private Float subTotal;
    
    private int modalite;

    // ======================================
    // =             Constantes             =
    // ======================================

    // ======================================
    // =            Constructeurs           =
    // ======================================

	  public OrderLine() {
	  }

//    public OrderLine(Integer quantity, Item item) {
//        this.quantity = quantity;
//        this.item = item;
//    }
//    public OrderLine(Integer quantity, Item item, Float unitCost, int modalite) {
//        this.quantity = quantity;
//        this.item = item;
//        this.modalite = modalite;
//        this.unitCost = unitCost;
//        calculateSubTotal();
//    }


    // ======================================
    // =     Methodes Lifecycle Callback    =
    // ======================================
//    @PrePersist
//    @PreUpdate
//    private void validateData() {
//        if (quantity == null || quantity < 0)
//            throw new ValidationException("Invalid quantity");
//    }

    // ======================================
    // =          Methodes publiques        =
    // ======================================
//    public Float getSubTotal() {
//        return item.getUnitCost() * quantity;
//    }
//    public void calculateSubTotal() {
//    	subTotal = unitCost*quantity;
//    }

    // ======================================
    // =          Methodes Protegees        =
    // ======================================

    // ======================================
    // =             Accesseurs             =
    // ======================================

    public Long getId() {
        return id;
    }
    public void setId(long id){
    	this.id = id;
    }

    public Float getUnitCost() {
		return unitCost;
	}
	public void setUnitCost(Float unitCost) {
		this.unitCost = unitCost;
	}

	public int getModalite() {
		return modalite;
	}
	public void setModalite(int modalite) {
		this.modalite = modalite;
	}

	public void setSubTotal(Float subTotal) {
		this.subTotal = subTotal;
	}
	
	public Integer getQuantity() {
        return quantity;
    }
    public void setQuantity(Integer quantity) {
        this.quantity = quantity;
    }

    public Item getItem() {
        return item;
    }
    public void setItem(Item item) {
        this.item = item;
    }

    public OrderParFois getOrderParFois() {
        return orderParFois;
    }
    public void setOrderParFois(OrderParFois orderParFois) {
        this.orderParFois = orderParFois;
        orderParFois.getOrderParFois().add(this);
    }

    // ======================================
    // =           Methodes Privees         =
    // ======================================

    // ======================================
    // =   Methodes hash, equals, toString  =
    // ======================================
//    @Override
//    public boolean equals(Object o) {
//        if (this == o) return true;
//        if (o == null || getClass() != o.getClass()) return false;
//
//        OrderLine orderLine = (OrderLine) o;
//
//        if (!olid.equals(orderLine.olid)) return false;
//        if (!item.equals(orderLine.item)) return false;
//        if (!quantity.equals(orderLine.quantity)) return false;
//        if (!order.equals(orderLine.order)) return false;
//
//        return true;
//    }

//    @Override
//    public int hashCode() {
//        int result;
//        result = olid.hashCode();
//        result = 31 * result + quantity.hashCode();
//        result = 31 * result + item.hashCode();
//        result = 31 * result + order.hashCode();
//        return result;
//    }

//    @Override
//    public String toString() {
//        final StringBuilder sb = new StringBuilder();
//        sb.append("OrderLine");
//        sb.append("{id=").append(olid);
//        sb.append(", quantity=").append(quantity);
//        sb.append(", item=").append(item);
//        sb.append(", order=").append(order);
//        sb.append('}');
//        return sb.toString();
//    }
}
